// 导入数据库操作模块
const db = require('../db/index')
// 导入处理路径的path核心模块
const path = require('path')

// 发布新文章的处理函数
exports.addArticle = (req, res) => {
  // 手动校验上传的文件
  if (!req.file || req.file.fieldname !== 'cover_img') {
    return res.cc('文章封面必选')
  }

  const sql = 'select * from ev_article_cate where id=?'
  db.query(sql, [req.body.cate_id], (err, results) => {
    // 执行SQL语句失败
    if (err) return res.cc(err)
    // 合并
    const articleInfo = {
      ...req.body,
      pub_date: new Date(),
      author_id: req.user.id,
      cover_img: path.join('/uploads', req.file.filename),
      cate_name: results[0].cate_name
    }
    // 定义发布文章的SQL语句
    const sql = 'insert into ev_articles set ?'
    // 执行SQL语句
    db.query(sql, articleInfo, (err, results) => {
      // 执行SQL语句失败
      if (err) return res.cc(err)
      // 执行SQL语句成功，但是影响行数不等于1
      if (results.affectedRows !== 1) return res.cc('文章发布失败！')
      // 发布文章成功
      res.cc('发布文章成功！', 0)
    })
  })
}

// 获取文章列表的处理函数
exports.listArticle = (req, res) => {
  const sql = 'select id,title,pub_date,state,cate_name from ev_articles where is_delete=0 and author_id=? and cate_id = ifnull(?, cate_id)  and state = ifnull(?, state) '
  db.query(sql, [req.user.id, req.query.cate_id || null, req.query.state || null], (err, results) => {
    // 1.执行SQL语句失败
    if (err) return res.cc(err)
    // 2.执行SQL语句成功
    const total = results.length
    const firstArt = (req.query.pagenum - 1) * req.query.pagesize
    const lastArt = req.query.pagenum * req.query.pagesize - 1
    var arr = []
    for (i = firstArt; i <= lastArt; i++) {
      if (results[i]) {
        arr.push(results[i])
      }
    }
    res.send({
      code: 0,
      message: '获取文章列表成功！',
      total,
      data: arr
    })
  })
}

// 获取文章详情的处理函数
exports.queryArticleDetail = (req, res) => {
  // 定义根据id获取文章详情的SQL语句
  const sql = 'select * from ev_articles where id=?'
  // 执行SQL语句
  db.query(sql, [req.query.id], (err, results) => {
    // 执行SQL语句失败
    if (err) return res.cc(err)
    // SQL语句执行成功，但是没有查询到任何数据
    if (results.length !== 1) return res.cc('获取文章详情数据失败！')
    Reflect.deleteProperty(results[0], 'is_delete')
    results[0].username = req.user.username
    results[0].nickname = req.user.nickname
    res.send({
      code: 0,
      message: '获取文章成功！',
      data: results[0]
    })
  })
}

// 根据id删除文章的处理函数
exports.delArticleDetail = (req, res) => {
  // 定义删除文章分类的SQL语句
  const sql = 'update ev_articles set is_delete=1 where id=?'
  // 执行SQL语句
  db.query(sql, [req.query.id], (err, results) => {
    // 执行SQL语句失败
    if (err) return res.cc(err)
    // SQL语句执行成功，但是影响行数不等于1
    if (results.affectedRows !== 1) return res.cc('删除文章失败！')
    // 删除文章分类成功
    res.cc('删除文章成功！', 0)
  })
}